Many data processing systems and architectures provide ways of isolating and protecting sensitive data and sections of code from access by unauthorised persons or processes. Although it is important to be able to provide security, there is an overhead in performance and circuit area associated with this protection.
In small systems such as microcontrollers, it is very important that these overheads are kept low and thus, some compromise between level of security and performance may need to be made.
One way of keeping data and code secure is provided by ARM® of Cambridge UK, with their Trustzone architecture where there are secure and non-secure states and a software handler is used to transition between the states, the software handler protecting the security of the secure side. Although this approach provides a high degree of security, considerable software intervention in the form of the software handler is required to change security states which both reduces the performance of the system and increases the amount of effort required to develop an external application program interface API for the secure software as all calls must be proxied through the software hander. Similarly exceptions that occur whilst in the secure domain that require handling in the non-secure domain also need to be proxied through a secure exception handler, this allowing the secure state to be protected before control passes to the non-secure exception handler.